#include <iostream>
#include <list>

template <typename T>
void Print(const T &v)
{
    for (auto ite = v.begin(); ite != v.end(); ite++)
    {
        std::cout << *ite << " ";
    }
    std::cout << std::endl;
}

int main()
{
    std::list<int> l;
    for (int i = 0; i < 10; i++)
    {
        // 尾插
        l.push_back(i + 1);
    }
    Print(l);

    // l.insert(l.begin() + 2, 99); // 链表不支持随机迭代器，只能一步一步走

    auto ite = l.begin();
    ite++; // 支持++重载
    ite++;
    ite--; // 双向链表 可以回头
    l.insert(ite, 99);
    Print(l);

    // 取值
    // l[2]; // 不支持下标查找元素，链表只能一个一个找，效率太低

    // 逆序
    l.reverse();
    Print(l);

    // 删除
    // l.remove(); // 一个一个删O(n)

    return 0;
}